package com.imooc.SmartChargeStation.demo.websocket.servEndPoint.service;

import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * author: zpy
 * description: WebSocket(基于Tomcat @ServerEndPoint) 服务类
 * date: 2025/8/19
 * warning:
 *
 * 1.如何启用基于 Tomcat @ServerEndpoint 注解的 WebSocket？
 * a.确保 WebService.java的@ServerEndpoint 注解没有被注释
 *    @ServerEndpoint("/ws/server")
 * b.确保 WebSocketApplication.java的@EnableWebSocket 注解被注释
 *    //@EnableWebSocket
 *
 * 2.如何启用基于 Spring 注解的 WebSocket？
 * 与1.的注释反过来即可
 */

@Component
/*
    属于Spring的组件扫描机制，有了该注解，WsService会被Spring自动扫描并放到IOC容器中进行管理
 */
@Slf4j
//@ServerEndpoint("/ws/server")
/*
    基于Tomcat @ServerEndPoint注解的Websocket核心就是这个注解。
    客户端通过ws：//服务器地址：端口/ws/server连接到这个WebSocket服务
    该注解修饰的类，包含@Open @Close @OnMessage @OnError方法
    在Spring Boot中使用该注解需要明白怎么讲WebSocket服务注册到Spring容器里？
    答：配置ServerEndpointExporter类 ，通过@Configuration和@Bean注解实现。
    这个冯xiaolu给我说过一次的。
 */
public class WsService {

    @OnOpen
    public void onOpen()
    {
        log.info(">>>>ServerEndPoint 连接建立成功！<<<<");
    }

    @OnClose
    public void onClose()
    {
        log.info(">>>>ServiceEndPoint 连接关闭！<<<<");
    }

    @OnMessage
    public void onMessage(String message)
    {
        log.info(">>>>ServerEndPoint 收到消息: {}<<<<", message);
    }

    @OnError
    public void onError(Throwable error)
    {
        log.error(">>>>ServerEndPoint 发生错误: {}<<<<", error.getMessage());
        error.printStackTrace();
    }
}
